package fiuba.algo3.algothief;

import java.util.ArrayList;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class Criminal {

	private String nombre;
	private String sexo;
	private String hobby;
	private String cabello;
	private String senia;
	private String vehiculo;
	private ArrayList<Ciudad> ciudadesVisitadas;
	
	public Criminal(String nombre, String sexo, String hobby, String cabello, String senia, String vehiculo){
		this.nombre = nombre;
		this.sexo = sexo;
		this.hobby = hobby;
		this.cabello = cabello;
		this.senia = senia;
		this.vehiculo = vehiculo;
		this.ciudadesVisitadas = new ArrayList<Ciudad>();
	}
	

	public ArrayList<Ciudad> getCiudadesVisitadas() {
		return ciudadesVisitadas;
	}
	
	
	public void setCiudadesVisitadas(ArrayList<Ciudad> ciudades) {
		this.ciudadesVisitadas = ciudades;
	}

	
	public String getNombre() {
		return nombre;
	}

	
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	

	public String getSexo() {
		return sexo;
	}

	
	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	
	public String getHobby() {
		return hobby;
	}
	

	public void setHobby(String hobby) {
		this.hobby = hobby;
	}

	
	public String getCabello() {
		return cabello;
	}

	
	public void setCabello(String cabello) {
		this.cabello = cabello;
	}

	
	public String getSenia() {
		return senia;
	}

	
	public void setSenia(String senia) {
		this.senia = senia;
	}

	
	public String getVehiculo() {
		return vehiculo;
	}
	

	public void setVehiculo(String vehiculo) {
		this.vehiculo = vehiculo;
	}
	
	
	public void agregarCiudadVisitada(Ciudad ciudad) {
		this.ciudadesVisitadas.add(ciudad);
	}
	
	
	public Element serializar(Document doc) {
		Element elementoCriminal = doc.createElement("Criminal");
		elementoCriminal.setAttribute("nombre", this.nombre);
		elementoCriminal.setAttribute("sexo", this.sexo);
		elementoCriminal.setAttribute("hobby", this.hobby);
		elementoCriminal.setAttribute("cabello", this.cabello);
		elementoCriminal.setAttribute("senia", this.senia);
		elementoCriminal.setAttribute("vehiculo", this.vehiculo);
		Element elementoCiudadesVisitadas = doc.createElement("CiudadesVisitadas");
		elementoCriminal.appendChild(elementoCiudadesVisitadas);
		for (Ciudad ciudad : this.ciudadesVisitadas) {
			elementoCiudadesVisitadas.appendChild(ciudad.serializar(doc));
		}
		return elementoCriminal;
	}
	
	
	public static Criminal hidratar(Node elementoCriminal) {
		Criminal nuevoCriminal = new Criminal("","","","","","");
		nuevoCriminal.nombre = ((Element)elementoCriminal).getAttribute("nombre");
		nuevoCriminal.sexo = ((Element)elementoCriminal).getAttribute("sexo");
		nuevoCriminal.hobby = ((Element)elementoCriminal).getAttribute("hobby");
		nuevoCriminal.cabello = ((Element)elementoCriminal).getAttribute("cabello");
		nuevoCriminal.senia = ((Element)elementoCriminal).getAttribute("senia");
		nuevoCriminal.vehiculo = ((Element)elementoCriminal).getAttribute("vehiculo");
		Element elementoCiudadesVisitadas = (Element)((Element)elementoCriminal).getElementsByTagName("CiudadesVisitadas").item(0);
		for(int i=0; i< elementoCiudadesVisitadas.getChildNodes().getLength(); i++) {
			Ciudad ciudad = Ciudad.cargar(elementoCiudadesVisitadas.getChildNodes().item(i));
			nuevoCriminal.agregarCiudadVisitada(ciudad);
		}
		return nuevoCriminal;
	}
	
	
	public boolean comparar(Criminal criminalAComparar){
		
		boolean igual=true;
		if(this.sexo != criminalAComparar.getSexo()) igual=false;
		if(this.hobby != criminalAComparar.getHobby()) igual=false;
		if(this.cabello != criminalAComparar.getCabello()) igual=false;
		if(this.senia != criminalAComparar.getSenia()) igual=false;
		if(this.vehiculo != criminalAComparar.getVehiculo()) igual=false;
		
		return igual;
	}
	

	public Ciudad getCiudadInicial() {
		return this.ciudadesVisitadas.get(0);
	}
}
